package com.hiwan.system.dao.dept;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.framework.dao.ServiceUtilDao;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import com.hiwan.platform.util.Pojo2Map;
import com.hiwan.system.pojo.DeptInfo;

@Component
@Service
@Repository
public class DeptDao extends ServiceUtilDao {
   /***
	 * 根据部门号获取部门信息
	 * @param deptId
	 * @return DeptInfo
	 */
	public DeptInfo selectDeptInfo(String deptId) {
		return selectOne("selectDeptInfo", deptId, DeptInfo.class);
	}

	/**
	 * 根据部门ID获取其同机构上级部门列表
	 * @param deptId
	 * @return
	 */
	public List<DeptInfo> selectParentDeptList(String deptId) {
		return selectList("selectParentDeptList", deptId, DeptInfo.class);
	}
	
	public List<DeptInfo> selectDeptByName(String deptName,String parentDept,String belongOrg) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("deptName", deptName);
		params.put("parentDept", parentDept);
		params.put("belongOrg", belongOrg);
		return selectList("selectDeptByName", params, DeptInfo.class);
	}
	
	/**
	 * 根据belog_org和root_dept查询部门信息
	 * @param deptInfo
	 * @return
	 */
	public List<DeptInfo> selectSubDeptList(DeptInfo deptInfo){
		return this.selectList("selectSubDeptList", deptInfo,DeptInfo.class);
	}

	/**
	 * 根据部门ID获取其同机构下级部门列表
	 * 
	 * @param deptId
	 * @return
	 */
	public List<DeptInfo> selectChildDeptList(String deptId) {
		return selectList("selectChildDeptList", deptId, DeptInfo.class);
	}

	
	/**
	 * 根据机构号或者部门号，查询下属的部门信息
	 * @param orgId 查询机构代码
	 * @param deptId 查询上级部门代码
	 * @param type type="orgA",表示根据orgId查询所属的所有部门信息<br>
	 * 				type="orgB",表示查询上级部门为deptId，且所属机构为deptId所在机构的所有部门信息<br>
	 *              type="orgC",表示根据orgId查询，当前统计归属机构为orgId的所有部门信息<br>
	 *              type="deptA",表示根据deptId查询下属部门信息<br>
	 *              type="deptB",表示根据deptId查询，当前所属机构下的的一级部门信息<br>
	 * @return
	 */
	public List<DeptInfo> selectDeptList(String orgId, String deptId, String type) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("orgId", orgId);
		params.put("deptId", deptId);
		params.put("type", type);
		return selectList("selectDeptList", params, DeptInfo.class);
	}
	
    //新增部门信息
	public synchronized int insertDeptInfoByMapper(DeptInfo deptInfo) throws SQLException{
		int ret = insert("insertDept", deptInfo);
		return ret;
	}
	
	// 修改部門信息
	public int updateDeptInfoByMapper(DeptInfo deptInfo) throws SQLException{
		return this.update("updateDept", deptInfo);
	}
	
	// 刪除信息
	public int deleteDeptInfoByMapper(DeptInfo deptInfo)
			throws SQLException {
		return this.delete("deleteDept", deptInfo);
	}
	
	public int updateDeptFromXXY(DeptInfo deptInfo){
		return this.update("updateDeptFromXXY",deptInfo);
	}
	
	public int insertDeptFromXXY(DeptInfo deptInfo){
		return this.insert("insertDeptFromXXY",deptInfo);
	}
}